﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Entities;
using System.Data.SqlClient;
using System.Data;

namespace DAL
{
    public class FuncionalidadDAL : DBController
    {
        public FuncionalidadDAL()
        { 
        
        }

        /// <summary>
        /// Funcion que devuelve las funcionalidades
        /// </summary>
        /// <returns></returns>
        public List<FuncionalidadEntity> GetFuncionalidades()
        {
            try
            {
                List<FuncionalidadEntity> funcionalidades = new List<FuncionalidadEntity>();
                using (SqlConnection conn = this.OpenConn())
                {

                    SqlDataReader dr;

                    SqlCommand dCmd = new SqlCommand("MARAVILLA_SQL.spGetFuncionalidades", conn);

                    dCmd.CommandText = "MARAVILLA_SQL.spGetFuncionalidades";

                    dCmd.CommandType = CommandType.StoredProcedure;


                    // dCmd.ExecuteNonQuery();
                    dr = dCmd.ExecuteReader();
                    dCmd.Dispose();
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            FuncionalidadEntity funcionalidad = new FuncionalidadEntity();
                            funcionalidad.IntIdFuncionalidad = (int)dr.GetValue(0);
                            funcionalidad.VarNombre = (string)dr.GetValue(1);
                            funcionalidad.VarEtiqueta = (string)dr.GetValue(2);
                            funcionalidad.BitIsDeleted = (bool)dr.GetValue(3);

                            funcionalidades.Add(funcionalidad);
                        }
                    }
                }
                return funcionalidades;

            }catch(Exception ex){
                throw ex;
            }
        }



        /// <summary>
        /// Funcion que devuelve las funcionalidades
        /// </summary>
        /// <returns></returns>
        public List<FuncionalidadEntity> GetFuncionalidadesByRol(RolEntity _rol)
        {
            try
            {
                List<FuncionalidadEntity> funcionalidades = new List<FuncionalidadEntity>();
                using (SqlConnection conn = this.OpenConn())
                {

                    SqlDataReader dr;

                    SqlCommand dCmd = new SqlCommand("MARAVILLA_SQL.spGetFuncionalidadesByRol", conn);

                    dCmd.CommandText = "MARAVILLA_SQL.spGetFuncionalidadesByRol";

                    dCmd.CommandType = CommandType.StoredProcedure;


                    dCmd.Parameters.AddWithValue("@intIdRol", _rol.IntIdRol);

                    // dCmd.ExecuteNonQuery();
                    dr = dCmd.ExecuteReader();
                    dCmd.Dispose();
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            FuncionalidadEntity funcionalidad = new FuncionalidadEntity();
                            funcionalidad.IntIdFuncionalidad = (int)dr.GetValue(0);
                            funcionalidad.VarNombre = (string)dr.GetValue(1);
                            funcionalidad.VarEtiqueta = (string)dr.GetValue(2);
                            funcionalidad.BitIsDeleted = (bool)dr.GetValue(3);

                            funcionalidades.Add(funcionalidad);
                        }
                    }
                }
                return funcionalidades;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Funcion que borra las funcionalidades de un rol
        /// </summary>
        /// <returns></returns>
        public bool DeleteFuncionalidadesFromRol(RolEntity _rol)
        {
            try
            {
                using (SqlConnection conn = this.OpenConn())
                {

                    SqlCommand dCmd = new SqlCommand("MARAVILLA_SQL.spDeleteFuncionalidadesFromRol", conn);

                    dCmd.CommandText = "MARAVILLA_SQL.spDeleteFuncionalidadesFromRol";

                    dCmd.CommandType = CommandType.StoredProcedure;

                    dCmd.Parameters.AddWithValue("@intIdRol", _rol.IntIdRol);

                    dCmd.ExecuteNonQuery();
                }
                return true;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        /// <summary>
        /// Funcion que agrega las funcionalidades de un rol
        /// </summary>
        /// <returns></returns>
        public bool AddFuncionalidadesToRol(RolEntity _rol, FuncionalidadEntity _funcionalidad)
        {
            try
            {
                using (SqlConnection conn = this.OpenConn())
                {

                    SqlCommand dCmd = new SqlCommand("MARAVILLA_SQL.spAddFuncionalidadesToRol", conn);

                    dCmd.CommandText = "MARAVILLA_SQL.spAddFuncionalidadesToRol";

                    dCmd.CommandType = CommandType.StoredProcedure;

                    dCmd.Parameters.AddWithValue("@intIdRol", _rol.IntIdRol);
                    dCmd.Parameters.AddWithValue("@intIdFuncionalidad", _funcionalidad.IntIdFuncionalidad);

                    dCmd.ExecuteNonQuery();
                }
                return true;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
